package _52_正则表达式匹配;
/*
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符，
而'*'表示它前面的字符可以出现任意次（包含0次）。
在本题中，匹配是指字符串的所有字符匹配整个模式。例如，字符串"aaa"与模式"a.a"和"ab*ac*a"匹配，但是与"aa.a"和"ab*a"均不匹配
 */

/**
 * 思路：
 * 如果后一个字符不是*, 看前面匹配不匹配
 */
public class Solution {
    public boolean match(char[] str, char[] pattern) {

        if (str == null || pattern == null) {
            return false;
        }
        int strIndex = 0;
        int patternIndex = 0;
        return matchCore(str, strIndex, pattern, patternIndex);

    }

    boolean matchCore(char[] str, int strIndex, char[] pattern, int patternIndex) {
        //匹配到结尾，成功   当长度都为0，也成功
        if (strIndex == str.length && pattern.length == patternIndex) {
            return true;
        }
        //pattern已经结尾，失败
        if (strIndex < str.length && pattern.length == patternIndex) {
            return false;
        }

        if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') {
            if (strIndex < str.length && (str[strIndex] == pattern[patternIndex] || pattern[patternIndex] == '.')) {
                return matchCore(str, strIndex , pattern, patternIndex + 2)||   //匹配0个
                        matchCore(str, strIndex+1 , pattern, patternIndex + 2)||//匹配1个
                        matchCore(str, strIndex+1 , pattern, patternIndex );//匹配多个
            }
            else{
               return  matchCore(str, strIndex , pattern, patternIndex + 2);
            }

//第二个不是*,判断
        } else if (strIndex < str.length && (str[strIndex] == pattern[patternIndex] || pattern[patternIndex] == '.')) {
            return matchCore(str, strIndex + 1, pattern, patternIndex + 1);
        }


        return false;
    }

    public static void main(String[] args) {
        char[] str={};
        System.out.println(str.length);
    }
}
